package com.gzt.bookcatalog.dto;

import com.gzt.bookcatalog.model.Genre;
import jakarta.validation.constraints.*;
import lombok.*;

/**
 * 图书请求 DTO，用于创建和更新图书信息。
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class BookRequestDTO {
    /**
     * 图书标题，不能为空。
     */
    @NotBlank(message = "图书标题不能为空")
    private String title;

    /**
     * 图书作者，不能为空。
     */
    @NotBlank(message = "图书作者不能为空")
    private String author;


    /**
     * 图书类别，
     */
    @Builder.Default
    private Genre genre = Genre.OTHER;

    /**
     * 图书描述信息。
     */

    /**
     * 图书 ISBN 号，不能为空，且需符合 ISBN 格式。
     */
    @NotBlank(message = "图书 ISBN 号不能为空")
    @Pattern(regexp = "^(?:ISBN(?:-1[03])?:? )?(?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]$",
            message = "ISBN 号格式不正确")
    private String isbn;

    /**
     * 图书出版年份，不能为空，且需在 1000 到当前年份之间。
     */
    @NotNull(message = "图书出版年份不能为空")
    private Integer publicationYear;
    

    
    private String description;

}
